package com.station.Activitys.fragment;


import android.graphics.Color;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.station.Activitys.R;
import com.station.Activitys.activity.LoginActivity;
import com.station.Activitys.activity.MyDataActivity;
import com.station.Activitys.activity.MyReleaseActivity;
import com.station.Activitys.activity.PwdUpdateActivity;
import com.station.Activitys.bean.AppUpdate;
import com.station.Activitys.dialog.ClearCacheDialog;
import com.station.Activitys.fragment.base.BaseFragment;
import com.station.Activitys.utils.CacheManger;
import com.station.Activitys.utils.Constant;
import com.station.Activitys.utils.DataCleanUtils;
import com.station.Activitys.utils.FileUtils;
import com.station.Activitys.utils.GlideUtils;
import com.station.Activitys.utils.JumperUtils;
import com.station.Activitys.utils.StringUtils;
import com.station.Activitys.utils.ToastUtils;
import com.station.Activitys.utils.UpdateAPKUtils;

import org.simple.eventbus.EventBus;
import org.simple.eventbus.Subscriber;

import butterknife.Bind;
import butterknife.OnClick;

/**
 * 项目名称：基站 手机app
 * 类描述：我的 fragment
 * 创建人：张飞祥
 * 创建时间：2018/7/19 9:18
 * 修改人：张飞祥
 * 修改时间：2018/7/19 9:18
 * 修改备注：
 */
public class MyFragment extends BaseFragment {

    //头像
    @Bind(R.id.iv_my_icon)
    ImageView ivMyIcon;
    //姓名
    @Bind(R.id.tv_my_name)
    TextView tvMyName;
    //职位
    @Bind(R.id.tv_my_job)
    TextView tvMyJob;
    //缓存 大小
    @Bind(R.id.tv_clear_size)
    TextView tvClearSize;
    //版本号
    @Bind(R.id.tv_version_name)
    TextView tvVersionName;
    //新版本 更新图标
    @Bind(R.id.iv_update_new)
    ImageView ivUpdateNew;

    //APP 检查更新 实体类
    private AppUpdate mAppUpdate = null;
    //本地 版本号
    private int mVersionCode;
    //本地 版本名称
    private String mVersionName;
    //更新内容
    private String mContent = "";

    @Override
    protected void initViews() {
        //获取当用实体类
        mUser = CacheManger.getUser(mACache);
        //TODO 解析 APP检查更新 实体
        mAppUpdate = CacheManger.getApp(mACache);
        //TODO 配置当前用户数据
        if (mUser != null) {
            //用户名称
            tvMyName.setText(mUser.getRealName());
            //部门
            tvMyJob.setText(mUser.getDepartment() + "：" + mUser.getJob());
        }
        //头像
        GlideUtils.loadCircleImage(getActivity(),mUser.getImgUrl(),ivMyIcon);

        //初始化缓存大小
        tvClearSize.setText(cacheSize());

        /**
         * 判断 是否显示 检查更新小红点
         */
        //获取 本地 版本号
        mVersionCode = FileUtils.getLocalVersion(getActivity());
        //获取 本地 版本名称
        mVersionName = FileUtils.getLocalVersionName(getActivity());
        //TODO 业务逻辑判断
        if (mAppUpdate != null) {
            if (mAppUpdate.getVersionCode() > mVersionCode) {
                //显示 检查更新按钮出现小红点
                ivUpdateNew.setVisibility(View.VISIBLE);
            }else {
                //隐藏 检查更新出现小红点
                tvVersionName.setVisibility(View.VISIBLE);
                tvVersionName.setText("v " + mVersionName);
            }

            if (mAppUpdate.getRemark() != null && !"".equals(mAppUpdate.getRemark()))
                //获取更新内容
                mContent = StringUtils.isStrIntercept(mAppUpdate.getRemark(), "。");
        }
    }

    /**
     * 按钮点击事件
     *
     * @return
     */
    @OnClick({R.id.layout_my_release, R.id.layout_my_data, R.id.layout_my_account,
            R.id.layout_my_cache,R.id.layout_update, R.id.layout_my_exit})
    public void onClick(View view) {
        switch (view.getId()) {

            case R.id.layout_my_release:    //我的发布
                JumperUtils.JumpTo(getActivity(), MyReleaseActivity.class);
                break;

            case R.id.layout_my_data:       //我的资料
                JumperUtils.JumpTo(getActivity(), MyDataActivity.class);
                break;

            case R.id.layout_my_account:    //账号密码
                JumperUtils.JumpTo(getActivity(), PwdUpdateActivity.class);
                break;

            case R.id.layout_my_cache:      //清理缓存
                setClearSize();
                break;

            case R.id.layout_update:        //检查更新
                setApkCheckUpdate();
                break;

            case R.id.layout_my_exit:       //退出账号
                setExitLogin();
                break;
        }
    }

    /**
     * 清理缓存
     */
    public void setClearSize(){
        if (cacheSize().equals("0.0 byte")){
            new  MaterialDialog.Builder(getActivity())
                    .title("提示")
                    .content("当前还没有可清理的数据缓存！！")
                    .positiveText("确认")
                    .show();
        }else{
            new MaterialDialog.Builder(getActivity())
                    .title("提示")
                    .content("您确认要清除本应用所有数据缓存吗？")
                    .positiveText("确认")
                    .negativeText("取消")
                    .onPositive(new MaterialDialog.SingleButtonCallback() {
                        @Override
                        public void onClick(MaterialDialog dialog, DialogAction which) {
                            new ClearCacheDialog(getActivity()) {
                                @Override
                                public void setClearComplete() {
                                    tvClearSize.setText(cacheSize());
                                }
                            }.show();
                        }
                    }).show();
        }
    }

    /**
     * apk 版本检查更新
     */
    private void setApkCheckUpdate() {
        if (mAppUpdate.getVersionCode() != 0 && mAppUpdate.getVersionCode() > mVersionCode) {
            MaterialDialog updateApkMsg = new MaterialDialog.Builder(getActivity())
                    .title("检查更新")
                    .titleColor(Color.parseColor("#EC5B5B"))
                    .content("新版本：v " + mAppUpdate.getVersion() + "\n\n" + mContent)
                    .negativeText("取消")
                    .negativeColor(Color.parseColor("#EC5B5B"))
                    .positiveText("立即更新")
                    .positiveColor(Color.parseColor("#EC5B5B"))
                    .onPositive(new MaterialDialog.SingleButtonCallback() {
                        @Override
                        public void onClick(MaterialDialog dialog, DialogAction which) {
                            //执行开始新下载 最新版本APK
                            UpdateAPKUtils.initDownLoadAPK(getActivity()
                                    , mAppUpdate.getDownLoadUrl(), mAppUpdate.getVersion());

                        }
                    }).show();
            // 设置点击屏幕Dialog不消失
            updateApkMsg.setCanceledOnTouchOutside(false);
            //取消Back键监听
            updateApkMsg.setCancelable(false);
        } else {
            ToastUtils.showShort(getActivity(), "当前已是最新版本");
        }
    }

    /**
     * 应用 退出登录
     *
     * @return
     */
    public void setExitLogin() {
        // 提示 dialog
        MaterialDialog msgDialog = new MaterialDialog.Builder(getActivity())
                .title("退出")
                .titleColor(Color.parseColor("#EC5B5B"))
                .content("您确认要退出当前账号吗？")
                .negativeText("取消")
                .negativeColor(Color.parseColor("#EC5B5B"))
                .positiveText("确认")
                .positiveColor(Color.parseColor("#EC5B5B"))
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(MaterialDialog dialog, DialogAction which) {

                        //清空用户数据
                        mACache.remove(Constant.CACHE_USER);
                        mACache.remove(Constant.CACHE_USER_ID);
                        mACache.remove(Constant.CACHE_USER_PACK);
                        //通知主页面 退出
                        EventBus.getDefault().post("", Constant.BUS_EXIT_MAIN);
                        //跳转到 登录页面
                        JumperUtils.JumpTo(getActivity(), LoginActivity.class);
                    }
                }).show();
        // 设置点击屏幕Dialog不消失
        msgDialog.setCanceledOnTouchOutside(false);
        //取消Back键监听
        msgDialog.setCancelable(false);
    }

    /**
     * 获取 缓存 大小
     */
    private String cacheSize() {
        String size = null;
        try {
            size = DataCleanUtils.getTotalCacheSize(getActivity());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return size;
    }

    /**
     * 刷新页面数据
     */
    @Subscriber(tag = Constant.BUS_APP_PUSH)
    public void onPushData(String strPush) {
        initViews();
    }

    @Override
    protected int getContentViewId() {
        return R.layout.frg_my;
    }
}
